对于一个变量的样本,进行概率密度函数估计,在R语言中,可以用density
函数进行密度函数估计,然后用approxfun
对密度函数进行估计
df <- approxfun(density(u))
plot(approxfun(density(u)))
plot(density(u))
# 查询某一坐标的概率
df(x)
对于已知数据集x=$$$ \lbrace x_i \rbrace $$$,根据高斯核函数$$\textbf{K}(x-x_i)=\frac{1} {\sqrt{2\pi}\theta} exp(-\frac{(x-x_i)^2}{2\theta^2} )$$
求解可以得到概率密度函数的估计
在R中,若要估计二维联合密度函数,可以使用MASS包中的kde2d
函数进行估计,其中默认有25个区间
library(MASS)
set.seed(144)
x <- rnorm(1000)
y <- 5*x + rnorm(1000)
k <- kde2d(x, y, n=25)
# 结果呈现
image(k)
persp(k,phi=30,theta=20,d=5)
# 热力学图呈现 nlevel代表着分级的阶数
filled.contour(k, nlevels = 33)
# 查找图上某一点的概率
library(fields)
points <- data.frame(x=0:2, y=c(0, 5, 5))
interp.surface(k, points)
几点说明:
* 填充颜色说明:在filled.contour函数中可以加入color.palette=
填充类型 | color.palette |
---|---|
1 | rainbow |
2 | heat.colors |
3 | terrain.colors |
4 | topo.colors |
5 | cm.colors |
6 | grey.colors |
7 | tim.colors |
8 | seq |
在R中,对于多维变量估计联合密度函数,可以用ks包来对数据进行估计
使用ks包中的核密度函数进行估计之后,可以用predict
来获取某一点的值,例如:
set.seed(8192)
x <- 2^rnorm(100)
fhat <- kde(x=x, positive=TRUE)
plot(fhat, col=3)
points(c(0.5, 1), predict(fhat, x=c(0.5, 1)))
对于多维函数进行核密度估计:
library(MASS)
data(fgl)
x <- fgl[,c("RI", "Na")]
Chat <- kcopula(x=x)
plot(Chat, disp="filled.contour", thin=3, col="white", border=1)
predict(Chat,x=x[1,])
ks包中对于多维函数(>3)的密度估计,使用kde函数进行估计时,需要输入eval.points
,对于一维函数,输入的可以是一个向量,但是对于高维函数,eval.points
必须是一个list
变量
对于连续函数,$$条件概率=\frac {联合概率密度函数的偏导数} {编辑分布函数的偏导数}$$